package com.itlong.cloud.operate.dao;

import com.itlong.cloud.POJO.DTO.operate.OperateProductModelManageGetDTO;
import com.itlong.cloud.POJO.PO.OperateUserInfoPO;
import com.itlong.cloud.POJO.PO.ProductModelCodeRelationPO;
import com.itlong.cloud.POJO.VO.operate.OperateBusinessOperationLogVO;
import com.itlong.cloud.POJO.VO.operate.OperateProductCodeGetVO;
import com.itlong.cloud.POJO.VO.operate.OperateProductModelManageGetVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      运营-产品型号管理持久层接口
 * </desc>
 *
 * @createDate 2020/11/27
 */
@Mapper
@Repository
public interface IOperateProductModelManageDao {

    /**
     * <desc>
     *      获取业务日志列表
     * </desc>
     *
     * @return 业务日志列表
     * @author Juguang.S
     * @createDate 2020/11/27
     */
    List<OperateBusinessOperationLogVO> getLogPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取业务日志列表总记录数
     * </desc>
     *
     * @return 业务日志列表总记录数
     * @author Juguang.S
     * @createDate 2020/11/27
     */
    Integer getLogRecordCount(Map<String, Object> params);


    /**
     * <desc>
     *      获取任务书产品型号列表
     * </desc>
     *
     * @return 任务书产品型号列表
     * @author pengwei
     * @createDate 2020/11/30
     */
    List<OperateProductModelManageGetVO> getPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取任务书产品型号列表总记录数
     * </desc>
     *
     * @return 任务书产品型号列表总记录数
     * @author  pengwei
     * @createDate 2020/11/30
     */
    Integer getRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取任务书产品型号详情
     * </desc>
     *
     * @return 任务书产品型号详情
     * @author  pengwei
     * @createDate 2020/11/30
     */
    OperateProductModelManageGetVO getOne(OperateProductModelManageGetDTO  dto);

    /**
     * <desc>
     *     删除任务书产品型号
     * </desc>
     *
     * @return 删除任务书产品型号
     * @author  pengwei
     * @createDate 2020/12/01
     */
    Integer delete(OperateProductModelManageGetDTO  dto);

    /**
     * <desc>
     *     删除与产品型号相关的中间表信息
     * </desc>
     *
     * @return 删除任务书产品型号
     * @author  pengwei
     * @createDate 2020/12/01
     */
     void  batchDeleteRelatedData(String modelId);

    /**
     * <desc>
     *      获取运营该用户信息
     * </desc>
     *
     * @param myUserName 用户id
     * @return 用户信息
     * @author pengwei
     * @createDate 2020/12/01
     */
    OperateUserInfoPO getOperateUserPO(@Param("userId") String myUserName);

    /**
     * <desc>
     *      保存
     * </desc>
     *
     * @param map 参数集
     * @return 保存的行数
     * @author pengwei
     * @createDate 2020/12/01
     */
    Integer save(Map<String, Object> map);

    /**
     * <desc>
     *      查询和产品类型关联的中间记录数
     * </desc>
     *
     * @param modelId 型号Id
     * @return 和产品类型关联的中间记录数
     * @author pengwei
     * @createDate 2020/12/01
     */
    int queryRelatedProdMidCnt(@Param("modelId") String  modelId);


    /**
     * <desc>
     *      查询一样型号的记录数
     * </desc>
     *
     * @param map
     * @return 一样型号的记录数
     * @author pengwei
     * @createDate 2020/12/01
     */
    int querySameModelCnt(Map<String, Object> map);

    /**
     * <desc>
     *      批量保存产品型号编码数据
     * </desc>
     *
     * @param list 产品型号编码数据
     * @return 0 失败，1 成功
     * @author pengwei
     * @createDate 2020/12/01
     */
    Integer batchSaveProductModelCodeRelationData(List<ProductModelCodeRelationPO> list);

    /**
     * <desc>
     *      修改
     * </desc>
     *
     * @param map 参数集
     * @return 保存的行数
     * @author pengwei
     * @createDate 2020/12/02
     */
    Integer update(Map<String, Object> map);


    /**
     * <desc>
     *      获取任务书产品型号关联产品编码列表
     * </desc>
     *
     * @return 任务书产品型号关联产品编码列表
     * @author pengwei
     * @createDate 2020/12/02
     */
    List<OperateProductCodeGetVO> getRelatedProcCodePage(Map<String, Object> params);

    /**
     * <desc>
     *      获取任务书产品型号关联产品编码全量列表
     * </desc>
     *
     * @return 任务书产品型号关联产品编码全量列表
     * @author pengwei
     * @createDate 2020/12/03
     */
    List<OperateProductCodeGetVO> getRelatedProcCodeList(@Param("modelId") String  modelId);


    /**
     * <desc>
     *      获取任务书产品型号关联产品编码列表总记录数
     * </desc>
     *
     * @return 任务书产品型号关联产品编码列表总记录数
     * @author  pengwei
     * @createDate 2020/12/02
     */
    Integer getRelatedProcCodeRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取产品编码列表
     * </desc>
     *
     * @return 产品编码列表
     * @author pengwei
     * @createDate 2020/12/02
     */
    List<OperateProductCodeGetVO> getProcCodePage(Map<String, Object> params);

    /**
     * <desc>
     *      获取产品编码列表总记录数
     * </desc>
     *
     * @return 产品编码列表总记录数
     * @author  pengwei
     * @createDate 2020/12/02
     */
    Integer getProcCodeRecordCount(Map<String, Object> params);
}
